package com.yyh.io2;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;

/*3.由控制台按照固定格式输入学生信息，包括学号，姓名，年龄信息，当输入的内容为exit退出；将输入的学生信息分别封装到一个Student对象中，
再将每个Student对象加入到一个集合中，要求集合中的元素按照年龄大小正序排序；最后遍历集合，将集合中学生信息写入到记事本，每个学生数据占单独一行。*/
public class Test77 {
    public static void main(String[] args) throws IOException {
        // 创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        // 创建集合
        List<Student> students = new ArrayList<>();
        // 输入学生信息
        System.out.println("请输入学生信息（格式：学号,姓名,年龄）");
        System.out.println("输入'exit'退出程序");
        // 循环输入
        while (true) {
            System.out.print("请输入: ");
            String input = scanner.nextLine().trim();
            // 检查是否退出
            if ("exit".equalsIgnoreCase(input)) {
                break;
            }
            // 解析输入
            try {
                String[] parts = input.split(",");
                if (parts.length != 3) {
                    System.out.println("格式错误！请按照'学号,姓名,年龄'的格式输入");
                    continue;
                }
                String id = parts[0].trim();
                String name = parts[1].trim();
                int age = Integer.parseInt(parts[2].trim());
                // 创建Student对象并添加到集合
                Student student = new Student(id, name, age);
                students.add(student);
                System.out.println("学生信息添加成功: " + student);
            } catch (NumberFormatException e) {
                System.out.println("年龄格式错误！请输入有效的数字");
            } catch (Exception e) {
                System.out.println("输入格式错误，请重新输入");
            }
        }
        scanner.close();
        // 按年龄正序排序
        Collections.sort(students);

        // 写入文件
        writeToFile(students);

        System.out.println("程序执行完成！学生信息已保存到students.txt");
    }
    // 写入文件
    private static void writeToFile(List<Student> students) throws IOException {
        try (PrintWriter writer = new PrintWriter(new FileWriter("students.txt"))) {
            for (Student student : students) {
                writer.println(student.toString());
            }
        } catch (IOException e) {
            System.out.println("文件写入失败: " + e.getMessage());
        }
    }
}
// 学生类
class Student implements Comparable<Student>{
    // 学号
    private String id;
    // 姓名
    private String name;
    // 年龄
    private int age;
    // 无参构造
    public Student() {
    }
    // 全参构造
    public Student(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    // getter和setter方法
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    // equals和hashCode方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(id, student.id) && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, age);
    }
    // toString方法
    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        return this.id.compareTo(o.id);
    }
}
